Everything about Software Componentry totally explained
Component-based software engineering (CBSE) (also known as
Component-Based Development (CBD) or
Software Componentry) is a branch of the
software engineering discipline, with emphasis on
decomposition of the engineered systems into
functional or
logical components with well-defined
interfaces used for communication across the components. Components are considered to be a higher level of
abstraction than
objects and as such they don't share
state and communicate by exchanging
messages carrying data.
Software component
A
software component is a system element offering a predefined service or event, and able to communicate with other components.
Clemens Szyperski and
David Messerschmitt give the following five criteria for what a software component shall be to fulfill the definition:
- Multiple-use
- Non-context-specific
- Composable with other components
- Encapsulated for example, non-investigable through its interfaces
- A unit of independent deployment and versioning
A simpler definition can be:
A component is an object written to a specification.
It doesn't matter what the specification is:
COM,
Enterprise JavaBeans, etc., as long as the object adheres to the specification. It is only by adhering to the specification that the object becomes a component and gains features such as
reusability.
Software components often take the form of
objects or collections of objects (from
object-oriented programming), in some binary or textual form, adhering to some
interface description language (IDL) so that the component may exist autonomously from other components in a
computer.
When a component is to be accessed or shared across execution contexts or network links, techniques such as
serialization or
marshalling are often employed to deliver the component to its destination.
Reusability is an important characteristic of a high quality software component. A software component should be designed and implemented so that it can be reused in many different programs.
In the
1960s, scientific subroutine libraries were built that were reusable in a broad array of engineering and scientific applications. Though these subroutine libraries reused well-defined
algorithms in an effective manner, they'd a limited domain of application.
Today, modern reusable components encapsulate both data structures and the algorithms that are applied to the data structures.
Software components are built using a programming language that has a limited vocabulary, an explicit defined grammar and well-defined rules of syntax and semantics.
At the lowest level, the language mirrors the instruction set of the hardware. At the mid level, a programming language such as
C or
Smalltalk is used to create a procedural description of the program. And at the highest level, the language uses graphical icons or other symbology to represent the requirement for a solution. Here executable instructions are automatically generated.
When a good software developer produces a maintainable, well documented program, machine level language can make extremely efficient use of memory and "optimize" program execution speed. But mid level language allow software developer and the program to be machine independent. These are procedural languages. In non procedural language, a program by specifying the desired result is required to achieve the result. Support software translates the specification results into a machine executable code.
It builds on prior theories of
software objects,
software architectures,
software frameworks and
software design patterns, and the extensive theory of
object-oriented programming and the
object oriented design of all these. It claims that software components, like the idea of hardware
components, used for example in telecommunications, can ultimately be made interchangeable and reliable.
History
The idea that
software should be componentized, built from prefabricated
components, was first published in
Douglas McIlroy's address at the
NATO conference on
software engineering in
Garmisch,
Germany,
1968 titled
Mass Produced Software Components. This conference set out to counter the so-called
software crisis. His subsequent inclusion of
pipes and filters into the
Unix operating system was the first implementation of an infrastructure for this idea.
The modern concept of a software component was largely defined by
Brad Cox of
Stepstone, who called them
Software ICs and set out to create an infrastructure and market for these components by inventing the
Objective-C programming language. (He summarizes this view in his book
Object-Oriented Programming - An Evolutionary Approach 1986.)
IBM led the path with their
System Object Model (SOM) in the early
1990s. Some claim that
Microsoft paved the way for actual deployment of component software with
OLE and
COM. Today, many successful software component models exist.
Differences from object-oriented programming
The idea in
object-oriented programming (OOP) is that software should be written according to a mental model of the actual or imagined objects it represents. OOP and the related disciplines of
object-oriented design and
object-oriented analysis focus on modelling real-world interactions and attempting to create 'verbs' and 'nouns' which can be used in intuitive ways, ideally by end users as well as by programmers coding for those end users.
Software componentry, by contrast, makes no such assumptions, and instead states that software should be developed by gluing prefabricated components together much like in the field of
electronics or
mechanics. It accepts that the definitions of useful components, unlike objects, can be counter-intuitive. In general it discourages
anthropomorphism and naming, and is far more pessimistic about the potential for end user programming. Some peers will even talk of software components in terms of a new programming
paradigm:
component-oriented programming.
Some argue that this distinction was made by earlier
computer scientists, with
Donald Knuth's theory of "
literate programming" optimistically assuming there was convergence between intuitive and formal models, and
Edsger Dijkstra's theory in the article
The Cruelty of Really Teaching Computer Science, which stated that programming was simply, and only, a branch of
mathematics.
In both forms, this notion has led to many academic debates about the pros and cons of the two approaches and possible strategies for uniting the two. Some consider them not really competitors, but only descriptions of the same problem from two different points of view.
It takes significant effort and awareness to write a software component that's effectively reusable. The component needs:
to be fully documented;
more thorough testing;
robust input validity checking;
to pass back useful error messages as appropriate;
to be built with an awareness that it will be put to unforeseen uses;
a mechanism for compensating developers who invest the (substantial) efforts implied above.
Architecture
A computer running several software components is often called an application server. Using this combination of application servers and software components is usually called distributed computing. The usual real-world application of this is in financial applications or business software.
Technologies
Pipes and Filters
Component-oriented programming
Compound document technologies
Business object technologies
Distributed computing software components
Interface description languages
Generic programming emphasizes separation of algorithms from data representation
Inversion of Control (IoC) and Plain Old C++/Java Object (POCO/POJO) component frameworks
Further Information
Get more info on 'Software Componentry'.
|
External Link Exchanges
Do you know how hard it is to get a link from a large encyclopaedia? Well we're different and will prove it. To get a link from us just add the following HTML to your site on a relevant page:
<a href="http://component-based_software_engineering.totallyexplained.com">Component-based software engineering Totally Explained</a>
Then simply click through this link from your web page. Our crawlers will verify your link, extract the title of your web page and instantly add a link back to it. If you like you can remove the words Totally Explained and embed the link in article text.
As long as your link remains in place, we'll keep our link to you right here. Please play fair - our crawlers are watching. Your site must be closely related to this one's topic. Any kind of spamming, dubious practises or removing the link will result in your link from us being dropped and, potentially, your whole site being banned. |